Dungeon
This file is in the public domain. init -1 python: class Maze(object): ' Class which contains map itself, auto mapping record, and encounter enemy. ' def __init__(self, map, enemy=None, location=None): self.map=map self.enemy=enemy self.location=location self.mapped=[] for n,i in enumerate(map): self.mapped.append([]) for j in i: self.mappedn.append(0) class Coordinate(object): ' Class used for calculating relative coordinate. ' def __init__(self, maze=None, y=0, x=0, dy=0, dx=0): self.maze=maze self.y=y self.x=x self.dy=dy self.dx=dx class Minimap(object): ' A minimap. Minimap(current_coordinate).sm is a displayable to show this minimap. ' def __init__(self,child): self.sm = SpriteManager(ignore_time=True) for n,i in enumerate(child.maze.map): for m, j in enumerate(i): if child.maze.mappednm 1: if j in "1": d = Solid("#666", xysize=(12,12)) elif j in "x": d = Solid("#a93b40", xysize=(12,12)) elif j in "a": d = Solid("#3759a7", xysize=(12,12)) else: d = Solid("#fff9", xysize=(12,12)) else: d = Solid("#0000", xysize=(12,12)) self.add(d,n,m) if child.dy -1: self.add(Text("↑",size=12),child.y,child.x) elif child.dx 1: self.add(Text("→",size=12),child.y,child.x) elif child.dy 1: self.add(Text("↓",size=12),child.y,child.x) else: self.add(Text("←",size=12),child.y,child.x) def add(self, d,n,m): s = self.sm.create(d) s.x = m*12+12 s.y = n*12+12 screen move: # Screen which shows move buttons and a minimap fixed style_group "move": if front1.maze.mapfront1.yfront1.x is not "1": textbutton "↑" action Return(value=front1) xcenter .2 ycenter .7 textbutton "→" action Return(value=turnright) xcenter .3 ycenter .8 textbutton "↓" action Return(value=turnback) xcenter .2 ycenter .9 textbutton "←" action Return(value=turnleft) xcenter .1 ycenter .8 add Minimap(here).sm style move_button_text: size 60 # Assign background images. # "left0" means a wall on the lefthand, "front2" means a further wall on the front, and so on. # left2, front2, right2 # left1, front1, right1 # left0, here , right0 image floor = "floor.png" image left0 = "left0.png" image right0 = Transform("left0.png", xzoom=-1) image front1 ="front1.png" image left1 = "left1.png" image right1 = Transform("left1.png", xzoom=-1) image front2 = "front2.png" image left2 = "left2.png" image right2 = Transform("left2.png", xzoom=-1) label dungeon: # To start exploring, call or jump to this label # To exit, create an event which has return or jump statement. while True: # Calculate relative coordinates python: turnright=Coordinate(here.maze, here.y,here.x, here.dx,-here.dy) turnleft=Coordinate(here.maze, here.y, here.x, -here.dx,here.dy) turnback=Coordinate(here.maze, here.y,here.x, -here.dy,-here.dx) right0=Coordinate(here.maze, here.y+here.dx,here.x-here.dy, here.dy,here.dx) left0=Coordinate(here.maze, here.y-here.dx,here.x+here.dy, here.dy,here.dx) front1=Coordinate(here.maze, here.y+here.dy,here.x+here.dx, here.dy,here.dx) right1=Coordinate(here.maze, front1.y+front1.dx,front1.x-front1.dy, here.dy,here.dx) left1=Coordinate(here.maze, front1.y-front1.dx,front1.x+front1.dy, here.dy,here.dx) front2=Coordinate(here.maze, front1.y+front1.dy,front1.x+front1.dx, here.dy,here.dx) right2=Coordinate(here.maze, front2.y+front2.dx,front2.x-front2.dy, here.dy,here.dx) left2=Coordinate(here.maze, front2.y-front2.dx,front2.x+front2.dy, here.dy,here.dx) # Composite background images. Try-except clauses are used to prevent the List Out of Index Error scene show floor python: for i in "right2", "front2", "left1", "right1", "front1", "left0", "right0": try: j=globals()i if j.maze.mapj.yj.x "1": renpy.show(i) except: pass # Record maps python: for i in right1, front1, left0, right0, here: here.maze.mappedi.yi.x=1 # Check events. If it happens, call a label or jump out to a label. if here.maze.enemy is not None and renpy.random.randint(1, 25)< 3: #Events for first forest maze if here.maze forest1: #Randomizing the enemy one face if renpy.random.randint(1, 5)<2: "You are attacked by a goblin" call goblin_battle elif renpy.random.randint(1, 3)<2: "You are attacked by a red slime" call slime_battle else: "You are attacked by a green slime" #Events for second forest maze elif here.maze forest2: #Randomizing the enemy one face if renpy.random.randint(1, 4)<2: "You are attacked by a troll" else: "You are attacked by a goblin" call goblin_battle # Event to leave the dungeon if here.maze.maphere.yhere.x "x": jump forestentrance # Event to move from first forest dungeon to the second if here.maze.maphere.yhere.x "a": jump forest2 # # Otherwise, call the move screen $ renpy.block_rollback() call screen move $ here=_return